/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controlador;

import Beans.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author USUARIO
 */
public class controlador extends HttpServlet {

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession(); 
        String accion = request.getParameter("accion");
        try {
            String nom, desc;
            boolean estadoTB;
            if(accion.equals("operTB"))
            {   int rpst = 0;
                nom = request.getParameter("tbNom");
                desc = request.getParameter("tbDes");
                estadoTB =  Boolean.parseBoolean(request.getParameter("tpEst"));
                ModVeh_TipoDeBus tp = new ModVeh_TipoDeBus();
                tp.setId(0);
                tp.setNombre(nom);
                tp.setDescripcion(desc);
                tp.setFk_idusuario_crea(0);
                tp.setFk_idusuario_mod(0);
                tp.setEliminado(false);
                tp.setEstado(estadoTB);
                tp.setAccion(request.getParameter("accionBD"));
                rpst = tp.operaciones(tp);
                if(rpst != 0)
                { response.sendRedirect("modulos/vehiculo/newEditTipoDeBus.jsp?msg=Se inserto correctamente el nuevo Tipo de Bus");
                }
            } else if(accion.equals("operV"))
            { int rsptv = 0;
              int rsptp = 0;
              int rspta = 0;
              int rsptb = 0;
              String placa = request.getParameter("vPla");
              String modelo = request.getParameter("vMod");
              String tipVeh = request.getParameter("vTipVeh");
              Integer idTipBus = Integer.parseInt(request.getParameter("vIdTipBus"));
              int piso = Integer.parseInt(request.getParameter("vPis"));
              int pisoUnoCanUno,pisoDosCanUno,pisoDosCanDos;
              boolean estado = Boolean.parseBoolean(request.getParameter("vEst"));
              ModVeh_Vehiculo v = new ModVeh_Vehiculo();
              v.setIdvehiculo(0);
              v.setPlaca(placa);
              v.setModelo(modelo);
              v.setEstado(estado);
              v.setFk_idusuario_crea(0);
              v.setFk_idusuario_mod(0);
              v.setEliminado(false);
              v.setAccion(request.getParameter("accionBD"));
              if(tipVeh.equalsIgnoreCase("Carga"))
              { rsptv = v.operaciones(v);
                ModVeh_Carga c = new ModVeh_Carga();
                c.setIdcarga(0);
                c.setNombre(tipVeh);
                c.setIdvehiculo(rsptv);
                c.setAccion(request.getParameter("accionBD"));
                c.operaciones(c);
                response.sendRedirect("modulos/vehiculo/newEditVehiculo.jsp?msg=Se registro correctamente el nuevo Vehiculo de Carga");
              } else
              { rsptv = v.operaciones(v);
                ModVeh_Bus b = new ModVeh_Bus();
                b.setIdbus(0);
                b.setNombre(tipVeh);
                b.setIdtipobus(idTipBus);
                b.setIdvehiculo(rsptv);
                b.setAccion(request.getParameter("accionBD"));
                rsptb = b.operaciones(b);
                if(piso==1)
                {   ModVeh_Piso p = new ModVeh_Piso();
                    p.setIdPiso(0);
                    p.setPiso(piso);
                    p.setPrecio(0);
                    p.setId_bus(rsptb);
                    p.setFk_idusuario_crea(0);
                    p.setFk_idusuario_mod(0);
                    p.setEliminado(false);
                    p.setAccion("I");
                    rsptp = p.operaciones(p);
                    pisoUnoCanUno = Integer.parseInt(request.getParameter("vPisUnoCan"));
                    pisoUnoCanUno = pisoUnoCanUno + 1;
                    ModVeh_Asientos a = new ModVeh_Asientos();
                    a.setId_asiento(0);
                    a.setEstado("Libre");
                    a.setId_pis(rsptp);
                    a.setFk_idusuario_crea(0);
                    a.setFk_idusuario_mod(0);
                    a.setEliminado(false);
                    for(int i=1; i<pisoUnoCanUno; i++)
                    {   a.setNumero(i);
                        a.setAccion("I");
                        a.operaciones(a);
                    }
                    response.sendRedirect("modulos/vehiculo/newEditVehiculo.jsp?msg=Se registro correctamente el nuevo Bus");
                } else
                {   ModVeh_Piso ps = new ModVeh_Piso();
                    piso = piso + 1;
                    ps.setIdPiso(0);
                    ps.setPrecio(0);
                    ps.setId_bus(rsptb);
                    ps.setFk_idusuario_crea(0);
                    ps.setFk_idusuario_mod(0);
                    ps.setEliminado(false);
                    for(int ctp=1; ctp<piso; ctp++)
                    {   if(ctp == 1)
                        {   ps.setPiso(ctp);
                            ps.setAccion("I");
                            rsptp = ps.operaciones(ps);                        
                            pisoDosCanUno = Integer.parseInt(request.getParameter("vPisoDosCanUno"));
                            pisoDosCanUno = pisoDosCanUno + 1;
                            ModVeh_Asientos a = new ModVeh_Asientos();
                            a.setId_asiento(0);
                            a.setEstado("Libre");
                            a.setId_pis(rsptp);
                            a.setFk_idusuario_crea(0);
                            a.setFk_idusuario_mod(0);
                            a.setEliminado(false);
                            for(int j=1; j<pisoDosCanUno; j++)
                            {   a.setNumero(j);
                                a.setAccion("I");
                                a.operaciones(a);
                            }
                        }else
                        {   ps.setPiso(ctp);
                            ps.setAccion("I");
                            rsptp = ps.operaciones(ps);
                            pisoDosCanDos = Integer.parseInt(request.getParameter("vPisoDosCanDos"));
                            pisoDosCanDos = pisoDosCanDos + 1;
                            ModVeh_Asientos a = new ModVeh_Asientos();
                            a.setId_asiento(0);
                            a.setEstado("Libre");
                            a.setId_pis(rsptp);
                            a.setFk_idusuario_crea(0);
                            a.setFk_idusuario_mod(0);
                            a.setEliminado(false);
                            for(int l=1; l<pisoDosCanDos; l++)
                            {   a.setNumero(l);
                                a.setAccion("I");
                                a.operaciones(a);
                            }
                        }
                    }
                    response.sendRedirect("modulos/vehiculo/newEditVehiculo.jsp?msg=Se registro correctamente el nuevo Bus");
                }
              }
            } else if(accion.equals("operAgen"))
            {   int rspt = 0;
                String nombre = request.getParameter("aNom");
                String direccion = request.getParameter("aDir");
                String ciudad = request.getParameter("aCiu");
                int  userCrea = Integer.parseInt(request.getParameter("userCrea"));
                String acc = request.getParameter("accionBD");
                ModIti_Agencias a = new ModIti_Agencias();
                a.setId(0);
                a.setNombre(nombre);
                a.setDireccion(direccion);
                a.setCiudad(ciudad);
                a.setFk_idusuario_crea(0);
                a.setFk_idusuario_mod(0);
                a.setAccion(acc);
                rspt = a.operaciones(a);
                if(rspt != 0)
                { response.sendRedirect("modulos/itinerario/newEditAgencia.jsp?msg=Se registro correctamente la nueva Agencia");
                }
            } else if(accion.equals("operRut"))
            {   int rptR = 0;
                String origen = request.getParameter("rOri");
                String destino = request.getParameter("rDes");
                String duracion = request.getParameter("rTieEstRec");
                if(origen.equals(destino))
                { response.sendRedirect("modulos/itinerario/newEditRuta.jsp?msgA=No puede ser la misma ciudad para origen y destino");
                } else
                {   try
                    {
                        ModIti_Ruta r = new ModIti_Ruta();
                        r.setId(0);
                        r.setOrigen(origen);
                        r.setDestino(destino);
                        DateFormat formato = new SimpleDateFormat("HH:mm");
                        Date date;
                        date = formato.parse(duracion);                    
                        Calendar cal = Calendar.getInstance();
                        cal.setTime(date);
                        r.setDuracion(cal);
                        boolean estado = false;
                        if(request.getParameter("rEst")==null){
                            estado = true;
                        }
                        r.setEstado(estado);
                        r.setFk_idusuario_crea(0);
                        r.setFk_idusuario_mod(0);
                        r.setAccion(request.getParameter("accionBD"));
                        boolean estas = false;
                        estas = r.validarRuta(origen, destino);
                        if(estas==true)
                        { response.sendRedirect("modulos/itinerario/newEditRuta.jsp?msgA=Ruta ya existe, no puede duplicarla");
                        } else 
                        {   rptR = r.operaciones(r);
                            if(rptR != 0)
                            { response.sendRedirect("modulos/itinerario/newEditRuta.jsp?msg=Se registro correctamente la nueva Ruta");
                            }
                        }
                    } catch(ParseException e)
                    {}
                                        
                }                
            } else if(accion.equals("operServ"))
            {   int rspt = 0;
                ModIti_Servicios se = new ModIti_Servicios();
                se.setId(Integer.parseInt(request.getParameter("idSer")));
                se.setNombre(request.getParameter("sNom"));
                String tipServicio = request.getParameter("sTipSer");
                se.setFk_Idruta(Integer.parseInt(request.getParameter("sIdRut")));
                se.setFk_idusuario_crea(0);
                se.setFk_idusuario_mod(0);
                se.setAccion(request.getParameter("accionBD"));
                if(tipServicio.equalsIgnoreCase("Directo"))
                {   se.setTiposervicio(tipServicio);
                    rspt = se.operaciones(se);
                    if(rspt != 0)
                    { String tipHor = request.getParameter("sHor");
                      if(tipHor.equalsIgnoreCase("Libre"))
                      { if(session.getAttribute("sesHor") != null)
                        {   List<ModIti_Itinerario> listHor = (List<ModIti_Itinerario>)session.getAttribute("sesHor");
                            for(int i=0; i<listHor.size(); i++)
                            {   ModIti_Itinerario it = listHor.get(i);
                                it.setIditinerario(0);
                                it.setHorasalida(it.getHorasalida());
                                it.setHorallegada(it.getHorasalida());
                                it.setFk_idservicio(rspt);
                                it.setFk_idusuario_crea(0);
                                it.setFk_idusuario_mod(0);
                                it.setAccion(request.getParameter("accionBD"));
                                int ok = it.operaciones(it);                                
                            }
                        }
                      }
                      response.sendRedirect("modulos/itinerario/newEditServicio.jsp?msg=Se registro sastifactoriamente el nuevo Servicio");
                    }
                }
                if(request.getParameter("sHor") == "Escala")
                {   
                }  /* *-*-*-**-*-* FALTA PROGRAMAR POR ESCALA *-*-**-*-*-*-*-* */
            } else if(accion.equals("operRanFec"))
            {   try
                {   String fechafin = request.getParameter("fecHas");  
                    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
                    Date date ;
                    date = f.parse(fechafin);
                    Calendar c = Calendar.getInstance();              
                    c.setTime(date);
                    /******************************************************/
                    Date dat = new Date();
                    Calendar cal = new GregorianCalendar();
                    cal.setTime(dat);
                    ModIti_RangoDisponibilidad r = new ModIti_RangoDisponibilidad();
                    r.setId(0);
                    r.setFechainicio(cal);
                    r.setFechafin(c);
                    int rspt = r.operaciones(r);
                    {   response.sendRedirect("modulos/itinerario/programacionItinerario.jsp?msg= Se guardo sastifactoriamente el nuevo rango de disponibilidad");
                    }
                } catch(ParseException e)
                {
                }                
            } else if(accion.equals("operProg"))
            {   int idi = Integer.parseInt(request.getParameter("idI"));
                int idrg = Integer.parseInt(request.getParameter("idRG"));
                int idveh = Integer.parseInt(request.getParameter("idVeh"));
                int idemp = Integer.parseInt(request.getParameter("idEmp"));
                int idage = Integer.parseInt(request.getParameter("idA"));
                String acc = request.getParameter("accionBD");
                ModIti_Programacion p = new ModIti_Programacion();
                p.setIdprogramacion(0);
                p.setFk_idrangodisponibilidad(idrg);
                p.setFk_iditinerario(idi);
                p.setFk_idvehiculo(idveh);
                p.setFk_idagencia(idage);
                p.setFk_idempleado(idemp);
                p.setFk_idusuario_crea(0);
                p.setFk_idusuario_mod(0);
                p.setAccion(acc);
                int rpt = p.operaciones(p);
                if(rpt != 0)
                {   String [] dias = request.getParameterValues("dias");
                    ModIti_Dias d = new ModIti_Dias();
                    int rpta = 0;
                    for(int i=0; i<dias.length; i++)
                    {   d.setIddias(0);
                        d.setDia(dias[i]);
                        d.setFk_idprogramacion(rpt);
                        d.setFk_idusuario_crea(0);
                        d.setFk_idusuario_mod(0);
                        d.setAccion(acc);
                        d.operaciones(d);
                        rpta ++;
                    }
                    if(rpta != 0)
                    {response.sendRedirect("modulos/itinerario/programacionItinerario.jsp?msg=Se programado con exito");}
                }                
            }
            
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
